import axios from "axios";
// 导入仓库实例
import store from "@/store";
import { Toast } from "vant";

// axios.defaults.baseURL = ''
const instance = axios.create({
  baseURL: "http://toutiao.itheima.net",
});

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // config是这次请求的所有的配置
    // config.headers 是这次请求的请求头配置
    const token = store.getters.token;
    // token存在说明就登录了，那么请求头就携带token
    if (token) config.headers.Authorization = `Bearer ${token}`;
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    console.log(response, "===========响应拦截============");
    // 对响应数据做点什么
    return response;
    // return { msg: '获取数据成功！但是数据就是不给你' }
  },
  async function (error) {
    // 请求出错，状态码不是2xx开头，就属于请求错误，就会走这里
    if (error.response && error.response.status === 401) {
      // 短token过期了,要处理
      if (store.getters.token) {
        // 登录才可以换
        const { refresh_token } = store.state.user;
        // 去刷新token接口获取新的token
        try {
          let { data } = await axios({
            url: "http://toutiao.itheima.net/v1_0/authorizations",
            method: "put",
            headers: {
              Authorization: `Bearer ${refresh_token}`,
            },
          });
          // 存起来
          store.commit("setUser", {
            token: data.data.token,
            refresh_token,
          });
          // 继续上一次出错的请求，这次让他正确完成
          return instance(error.config); // error.config是上一次没有完成的请求的所有配置！
        } catch (err) {
          Toast.fail("登录失效，重新登录");
          this.$router.push("/login");
        }
      } else {
        Toast.fail("登录失效，重新登录");
        this.$router.push("/login");
        return Promise.reject(error);
      }
    } else {
      return Promise.reject(error);
    }
    console.log(error);
    // 对响应错误做点什么
  }
);

export default instance;
